package com.study.zgw.byteBuffer;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;

public class TestByteBuffer {
    public static void main(String[] args) {
        /**
         * EmbeddedChannel是 Netty 中用于进行单元测试的工具类。它提供了一个嵌入式的 Channel（通道）实现，
         * 可以方便地在不启动完整的 Netty 服务器或客户端的情况下，对 ChannelHandler（通道处理器）的逻辑进行测试。
         * 它允许在测试环境中模拟入站（inbound）和出站（outbound）数据的流动，通过这个工具，
         * 可以方便地验证自定义的 ChannelHandler 是否按照预期的方式处理数据。
         */
        EmbeddedChannel channel = new EmbeddedChannel(
                new LengthFieldBasedFrameDecoder(1024, 0, 4, 0, 0),
                new LoggingHandler(LogLevel.DEBUG)
        );

        //相比原生的ByteBuffer，Netty的ByteBuffer有更加多的方法 能实现动态扩容 读写不用切换指针
        //默认使用直接内存 也可以使用堆内存
        ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer();
        send(buffer, "hello world");
        send(buffer, "Hi!");
        channel.writeInbound(buffer);
    }

    public static void send(ByteBuf byteBuf, String content) {
        byte[] bytes = content.getBytes();
        int length = bytes.length;
        byteBuf.writeInt(length);
        byteBuf.writeBytes(bytes);
    }
}
